package mysql

import (
	"ecms/config"
	mysqlDriver "gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

var db *gorm.DB

func init() {
	connect(true)
	go func() {
		for {
			time.Sleep(config.Mysql().KeepConnectionDuration)
			autoPing()
		}
	}()
}

func connect(allowPanic bool) {
	dsn := config.Mysql().Dsn()
	var err error
	db, err = gorm.Open(mysqlDriver.Open(dsn), &gorm.Config{})
	if err != nil && allowPanic {
		panic(err)
	}

	// 设置一些连接参数配置
	sqlDb, err := db.DB()
	if err != nil && allowPanic {
		panic(err)
	}
	sqlDb.SetConnMaxLifetime(config.Mysql().KeepConnectionDuration)
	sqlDb.SetMaxOpenConns(config.Mysql().MaxOpenConnections)
	sqlDb.SetMaxIdleConns(config.Mysql().MaxIdleConnections)
}

func autoPing() {
	Db, err := db.DB()
	if err != nil {
		return
	}
	if err := Db.Ping(); err != nil {
		connect(false)
	}
}

func Conn() *gorm.DB {
	return db
}
